#ifndef __CONVOLUTION_SEPARABLE_H__
#define __CONVOLUTION_SEPARABLE_H__

#define KERNEL_RADIUS 8
#define KERNEL_LENGTH (2 * KERNEL_RADIUS + 1)

////////////////////////////////////////////////////////////////////////////////
// Reference CPU convolution
////////////////////////////////////////////////////////////////////////////////
void convolutionRowCPU(
						float *h_Dst,
						float *h_Src,
						float *h_Kernel,
						int imageW,
						int imageH,
						int kernelR
						);

void convolutionColumnCPU(
						float *h_Dst,
						float *h_Src,
						float *h_Kernel,
						int imageW,
						int imageH,
						int kernelR
						);



////////////////////////////////////////////////////////////////////////////////
// GPU convolution
////////////////////////////////////////////////////////////////////////////////
void setConvolutionKernel(float *h_Verticalkernel, float *h_Horizontalkernel);

void convolutionRowsGPU(
					   float *d_Dst,
					   float *d_Src,
					   int imageW,
					   int imageH
					   );

void convolutionColumnsGPU(
						  float *d_Dst,
						  float *d_Src,
						  int imageW,
						  int imageH
						  );
#endif